/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.cliente;

import com.losalpes.data.IPersistence;
import com.losalpes.data.Persistence;
import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.TipoDocumento;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 * Clase con la logica de negocio del cliente.
 * @author integradores
 */
@Stateless
public class ClientesServiceMock implements IClienteService {
    @EJB
    private IPersistence persitencia;

    /**
     * Atributos de la clase
     */
    ArrayList<Cliente> c=new ArrayList<Cliente>();

    /**
     * Constructor por defecto
     */
    public ClientesServiceMock() {
//        for (int i = 0; i < 10; i++) {
//            Cliente cliente = new Cliente(TipoDocumento.CEDULA, "numeroDocumento" + i,
//                    "nombreCliente" + i, "telefonoFijo" + i,
//                    "direccion" + i, "ciudad" + i,
//                    "departamento" + i, "pais" + i,
//                    "email" + i);
//
//            c.add(cliente);
//        }
        //this.persitencia= new Persistence();
    }


    public void remove(Cliente cliente) {
        this.persitencia.delete(cliente);
        //c.remove(cliente);
    }

    /**
     * @param cCliente
     */
    public void add(Cliente cliente) {
        //boolean existe = false;
        if (this.persitencia.findById(Cliente.class, cliente.getNumeroDocumento())==null){
            this.persitencia.create(cliente);
        }
        else {
            this.persitencia.update(cliente);
        }
//
//        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
//            Cliente cliente = it.next();
//            if (cliente.getNumeroDocumento().equals(cCliente.getNumeroDocumento())) {
//                cliente.setDepartamento(cCliente.getDepartamento());
//                cliente.setTipoDocumento(cCliente.getTipoDocumento());
//                cliente.setCiudad(cCliente.getCiudad());
//                cliente.setNombreCliente(cCliente.getNombreCliente());
//                cliente.setTelefonoFijo(cCliente.getTelefonoFijo());
//                cliente.setTelefonoCelular(cCliente.getTelefonoCelular());
//                cliente.setDireccion(cCliente.getDireccion());
//                cliente.setPais(cCliente.getPais());
//                cliente.setProfesion(cCliente.getProfesion());
//                cliente.setEmail(cCliente.getEmail());
//                existe = true;
//            }
//        }

        //if (!existe) {
            //c.add(cCliente);
//            this.persitencia.create(cliente);
        //}
    }


    public void update(Cliente cCliente) {
        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getNumeroDocumento().equals(cCliente.getNumeroDocumento())) {
                cliente.setDepartamento(cCliente.getDepartamento());
                cliente.setTipoDocumento(cCliente.getTipoDocumento());
                cliente.setCiudad(cCliente.getCiudad());
                cliente.setNombreCliente(cCliente.getNombreCliente());
                cliente.setTelefonoFijo(cCliente.getTelefonoFijo());
                cliente.setTelefonoCelular(cCliente.getTelefonoCelular());
                cliente.setDireccion(cCliente.getDireccion());
                cliente.setPais(cCliente.getPais());
                cliente.setProfesion(cCliente.getProfesion());
                cliente.setEmail(cCliente.getEmail());
            }
        }
    }

    
    public Cliente findClienteById(String numeroDocumento) {
        return (Cliente) this.persitencia.findById(Cliente.class, numeroDocumento);
//        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
//            Cliente cliente = it.next();
//            if (cliente.getNumeroDocumento().equals(numeroDocumento)) {
//                return cliente;
//            }
//        }

        //return null;
    }

    public Cliente findClienteByEmail(String email) {
        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getEmail().equals(email)) {
                return cliente;
            }
        }

        return null;
    }

    public List<Cliente> findAll() {
        //return c;
        //Cliente cliente = new Cliente();
        return this.persitencia.findAll(Cliente.class);
    }

    public ArrayList<Cliente> findClienteByTipoDocumento(TipoDocumento tipoDocumento) {
        ArrayList<Cliente> clientes =
                new ArrayList<Cliente>();

        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getTipoDocumento().equals(tipoDocumento)) {
                clientes.add(cliente);
            }
        }

        return clientes;
    }

    public ArrayList<Cliente> findClienteByNombre(String nombreCliente) {
        ArrayList<Cliente> clientes =
                new ArrayList<Cliente>();

        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getNombreCliente().equals(nombreCliente)) {
                clientes.add(cliente);
            }
        }

        return clientes;
    }

    public ArrayList<Cliente> findClienteByIdToGrid(String numeroDocumento) {
        ArrayList<Cliente> clientes =
                new ArrayList<Cliente>();

        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getNumeroDocumento().equals(numeroDocumento)) {
                clientes.add(cliente);
            }
        }

        return clientes;
    }

     public ArrayList<Cliente> findClienteByMail(String email) {
        ArrayList<Cliente> clientes = new ArrayList<Cliente>();

        for (Iterator<Cliente> it = c.iterator(); it.hasNext();) {
            Cliente cliente = it.next();
            if (cliente.getEmail().equals(email)) {
                clientes.add(cliente);
            }
        }

        return clientes;
    }

}
